Modern computing environments consist of computer networks with multiple servers for performing many varied functions. Often access to a server or other network resource is limited to users(clients) who can present proper credentials to the server. The process of identifying one's self to a computer system is generally known as authentication, and often consists of the client logging on to a system by entering a user name followed by a password. If the password entered in by the client matches that maintained in a list by the server, the user is considered authenticated, and is logged into the server. Authenticated clients are then allowed access to the resources and services provided by the particular server according to the privilege level associated with the user name.
Modern computer networks typically have multiple servers. On a computer network with multiple servers, it is often desirable to have multiple user name/password lists, and each server is generally associated with a single user name/password list. The user name/password lists are typically grouped with other server specific data. The collection as a whole represents the configuration data for a particular server.
For example, a remote access server is a device that allows remote users to access network computing resources from a remote site such as home or a customer site. The network itself generally has its own configuration data, including its own user name and password lists to authenticate users to the network at large. Thus in the general case, a remote user must authenticate to the remote access server, and then, having done that, gain access to the network itself.
Administering user name/password configuration files in a multi-server environment is difficult. It is desirable to be able to make backup copies of configuration data from each server that can be stored in a secure place on the network. The stored configuration file can be used to restore the configuration of a server that becomes corrupted. It sometimes is useful to replicate user/names and passwords across multiple servers when, for example, simultaneous user capacity is being increased by adding additional servers. The user/name password lists tend to be large and contain confidential passwords, making it impractical and undesirable to enter the data by hand, so the ability to transfer memory based server configuration data to a file is important. Such a file, however, poses security challenges, because certain configuration data, such as passwords, is confidential and should not be disclosed. One common solution for protecting passwords when written to a text file is to hash them with a one-way hash. Unix, for example, does not store the plain-text versions of passwords. Instead, Unix stores a one way hash of the password. The hashing algorithm is a well-known algorithm. When a password is presented by a user, it too is hashed with the same algorithm, and the hashes are compared to determine if the original passwords match. One limitation of one way hash schemes is that the original clear-text password is not preserved on the server which is undesirable if the plain-text password is needed for another server purpose, such as an encryption key for data files.
Another prior art solution to protect confidential passwords is to encrypt the entire configuration file; this solution suffers from the fact that the entire configuration file, including public data, is encrypted and thus unreadable and difficult to modify.
What is needed is a system for saving and restoring configuration data to and from a text file that permits editing of public configuration data, preserves the secrecy of private configuration data, and ensures that improperly modified text files by unauthorized persons are blocked from restoration on a server.